package com.fs.web.base.utils;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.fs.common.pojo.User;
import org.apache.commons.lang3.StringUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * 权限工具类
 */
public class AuthorityUtils {
    /**
     * 构建权限map
     * @return map 包含 userId 和 comId
     */
    public static Map getAuthorityMap(Map map){
        String userId = StringToolUtils.SystemGetString("userId");
        String comId = StringToolUtils.SystemGetString("comId");
        List<String> ids = new ArrayList<>();
        if(StringUtils.isNoneBlank(userId) || StringUtils.isNoneBlank(comId)){
            if(StringUtils.isNoneBlank(userId)){
                map.put("userId",userId);
            }
            if(StringUtils.isNoneBlank(comId)){
                ids.add(comId);
                map.put("comId",ids);
            }
        }else{
            User user = ApplicationUtils.getUser().getUser();
            if(user.isSysAdm()){
                return map;
            }else{
                map.put("userId",user.getId());
            }
        }
        return map;
    }
    /**
     * 构建权限sql
     * @return
     */
    public static String getAuthoritySql(){
        StringBuffer sql = new StringBuffer();
        String userId = StringToolUtils.SystemGetString("userId");
        String comId = StringToolUtils.SystemGetString("comId");
        if(StringUtils.isNoneBlank(userId) || StringUtils.isNoneBlank(comId)){
            if(StringUtils.isNoneBlank(userId)){
                sql.append(" and user_id = '").append(userId).append("' ");
            }
            if(StringUtils.isNoneBlank(comId)){
                sql.append(" and com_id = '").append(comId).append("' ");
            }
        }else{
            User user = ApplicationUtils.getUser().getUser();
            if(user.isSysAdm()){
                return sql.toString();
            }else{
                sql.append(" and user_id = '").append(user.getId()).append("' ");
            }
        }
        return sql.toString();
    }

    /**
     * 构建权限wrapper
     * @return
     */
    public static QueryWrapper getAuthorityWrapper(QueryWrapper wrapper){
        String userId = StringToolUtils.SystemGetString("userId");
        String comId = StringToolUtils.SystemGetString("comId");
        if(StringUtils.isNoneBlank(userId) || StringUtils.isNoneBlank(comId)){
            if(StringUtils.isNoneBlank(userId)){
                wrapper.eq("user_id",userId);
            }
            if(StringUtils.isNoneBlank(comId)){
                wrapper.eq("com_id",comId);
            }
        }else{
            User user = ApplicationUtils.getUser().getUser();
            if(user.isSysAdm()){
                return wrapper;
            }else{
                wrapper.eq("user_id",user.getId());
            }
        }
        return wrapper;
    }
}
